﻿///////////////////////////////////////////////////////////////////////////////
// 文件名： Mesh.hpp
// 作者：   671643387@qq.com
// 日期：   2015年11月1日 下午6:45:10
// 简介：   
///////////////////////////////////////////////////////////////////////////////

#if !defined(GRAPHICS_GRAPHICS_COMPONENT_MESH_HPP_)
#define GRAPHICS_GRAPHICS_COMPONENT_MESH_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <graphics/Type.hpp>
#include <graphics/Component.hpp>

namespace graphics
{
    namespace graphics
    {
        namespace component
        {
            class Mesh;
            typedef boost::shared_ptr<Mesh> MeshPtr;

            class Mesh : public ::graphics::Component
            {
            public:
                enum IndexType
                {
                    IT_8,
                    IT_16,
                    IT_32
                };
            public:
                Mesh(void);
                virtual ~Mesh(void);

            public:
                void* MallocVertices(::graphics::size_t size);
                void* MallocIndices(::graphics::size_t size);
                void Free(void* memory);

                void SetVertices(void* vp);
                void SetIndices(void* vp);
                void* GetVertices(void) const;
                void* GetIndices(void) const;

                void SetVerticesSize(::graphics::size_t size);
                void SetIndicesSize(::graphics::size_t size);
                ::graphics::size_t GetVerticesSize(void) const;
                ::graphics::size_t GetIndicesSize(void) const;

                IndexType GetIndexType(void) const;

                void SetFVF(int fvf);
                int GetFVF(void) const;

                void SetDirty(bool dirty);
                bool IsDirty(void) const;

            public:
                static int FVF_XYZ;
                static int FVF_COLOR;
                static int FVF_INDEX;

            private:
                void* vertices_;
                void* indices_;

                ::graphics::size_t verticesSize_;
                ::graphics::size_t indicesSize_;

                IndexType indexType_;

                int fvf_;

                bool dirty_;
            };
        }
    }
}

#endif //GRAPHICS_GRAPHICS_COMPONENT_MESH_HPP_
